package com.lyn.serialport

import java.io.FileDescriptor
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.InputStream
import java.io.OutputStream

/**
 * 串口
 * @auth longyn
 * @date 2025/3/7
 * @desc 串口
 */
class SerialPort {

    /**
     * 打开串口
     * @param path 串口路径
     * @param baudRate 波特率
     * @param flags 标志 填0就好
     * @return 文件描述符
     */
    external fun open(path: String, baudRate: Int, flags: Int): FileDescriptor?

    /**
     * 关闭串口
     */
    external fun close(): Int

    /**
     * 获取文件描述符
     * @return 文件描述符
     */
    external fun getFileDescriptor(): FileDescriptor?

    /**
     * 获取输入流
     */
    fun getInputStream(): InputStream? {
        val fileDescriptor = getFileDescriptor() ?: return null
        return FileInputStream(fileDescriptor)
    }

    /**
     * 获取输出流
     */
    fun getOutStream(): OutputStream? {
        val fileDescriptor = getFileDescriptor() ?: return null
        return FileOutputStream(fileDescriptor)
    }

    companion object {
        init {
            System.loadLibrary("SerialPort")
        }
    }
}